package com.qumitech.visualnovel.component.util;

import java.math.BigDecimal;
import java.text.DecimalFormat;

/**
 * Created by fangzhipeng on 2017/10/14
 */
public class MathUtils {

    /**
     * 保留小数点后两位
     * @param number
     * @return
     */
    public static Double format2(Double number) {
        DecimalFormat df = new DecimalFormat("######0.00");
        return Double.parseDouble(df.format(number));
    }

    /**
     * 保留小数点后四位
     * @param number
     * @return
     */
    public static Double format4(Double number) {
        DecimalFormat df = new DecimalFormat("#.0000");
        return Double.parseDouble(df.format(number));
    }

    /**
     * 保留小数点后两位，返回字符串类型
     * @param number
     * @return 字符串
     */
    public static String format2ToStr(Double number) {
        DecimalFormat df = new DecimalFormat("######0.00");
        return df.format(number);
    }

    /**
     * 计算阶乘数，即n! = n * (n-1) * ... * 2 * 1
     *
     * @param n
     * @return
     */
    private static long factorial(int n) {
        return (n > 1) ? n * factorial(n - 1) : 1;
    }

    /**
     * 计算排列数，即A(n, m) = n!/(n-m)!
     *
     * @param n
     * @param m
     * @return 从n个数里去除m个数的排列个数
     */
    public static long arrangement(int n, int m) {
        return (n >= m) ? factorial(n) / factorial(n - m) : 0;
    }

    /**
     * 计算组合数，即C(n, m) = n!/((n-m)! * m!)
     *
     * @param n
     * @param m
     * @return 从n个数里去除m个数的组合个数
     */
    public static long combination(int n, int m) {
        return (n >= m) ? factorial(n) / factorial(n - m) / factorial(m) : 0;
    }


    /**
     * 生成指定范围内的随机数
     * @param min
     * @param max
     * @return
     */
    public static int genRandom(int min, int max) {
        return (int) (Math.random() * 100000 % (max - min + 1) + min);
    }

    public static int roundGreatOrEq5(Double number) {
        return  new BigDecimal(number).setScale(0, BigDecimal.ROUND_HALF_UP).intValue();
    }

    public static void main(String[] args) {
        System.out.println(roundGreatOrEq5(2.4));
    }
}
